// #[derive(Debug)]

// enum Book {
//     Papery(u32),
//     Electronic(String),
// }

// fn main() {
//     let book = Book::Papery(1001);
//     let ebook = Book::Electronic(String::from("url://..."));
//     println!("{:?}", book);
//     println!("{:?}", ebook);
// }

// // Rust 通过 match 语句来实现分支结构
// fn main() {
//     enum Book {
//         Papery {index: u32},
//         Electronic {url: String},
//     }
   
//     let book = Book::Papery{index: 1001};
//     let ebook = Book::Electronic{url: String::from("url...")};
   
//     match book {
//         Book::Papery { index } => {
//             println!("Papery book {}", index);
//         },
//         Book::Electronic { url } => {
//             println!("E-book {}", url);
//         }
//     }
// }

// Option 枚举类
enum Option<T> {
    Some(T),
    None,
}

// 想针对 opt 执行某些操作，你必须先判断它是否是 Option::None
fn main() {
    // 初始值为空的 Option 必须明确类型
    let opt: Option<&str> = Option::None;
    // let opt = Option::Some("Hello");
    match opt {
        Option::Some(something) => {
            println!("{}", something);
        },
        Option::None => {
            println!("opt is nothing");
        }
    }
}
